package com.fanghaoran.notes.dao;

import com.fanghaoran.notes.entity.User;

import java.math.BigDecimal;
import java.sql.SQLException;
import java.util.List;

/**
 * @Author: win11
 * @Date: 2023/04/13/20:28
 * @Description: 用户模块的数据库操作
 */
public interface UserDao {
    /**
     * 用户登录业务的数据库查询操作(通过用户名和密码查询用户)
     * @param user 要查询的用户信息
     * @return 返回查询到的用户信息
     * @throws Exception 异常
     */
    List<User> selectUserByNameAndPwd(User user) throws Exception;

    /**
     * 通过用户名和邮箱查询用户
     * @param user 用户信息
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<User> selectUserByNameOrEmail(User user) throws Exception;

    /**
     * 通过用户id查询用户
     * @param uId 用户id
     * @return 返回查询结果
     * @throws Exception 异常
     */
    List<User> selectUserByUid(int uId) throws Exception;


    /**
     * 用户注册业务的数据库插入操作
     * @param user 要插入的用户数据
     * @return 返回执行影响的行数 -1代表插入失败
     * @throws SQLException 异常
     */
    Integer insertUser(User user) throws SQLException;

    /**
     * 通过邮箱修改/重置密码业务的数据库修改操作
     * @param user 密码+邮箱信息
     * @return 返回执行影响的行数 -1代表修改失败
     * @throws SQLException 异常
     */
    Integer updatePwdByEmail(User user) throws SQLException;

    /**
     * 修改用户头像
     * @param uId 用户id
     * @param filename 头像名称
     * @return 返回执行结果
     * @throws SQLException 异常
     */
    Integer updateHeadPhoto(int uId,String filename) throws SQLException;

    /**
     * 更新余额
     * @param uId 用户id
     * @param remain 余额
     * @return 返回更新结果
     * @throws SQLException 异常
     */
    Integer updateBalance(int uId,BigDecimal remain) throws SQLException;
}
